﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Security;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace WinFormsApp1
{
    internal class TextHandlers
    {
        public static string GetIniValue(string select,string key)
        {
            Configure config = new Configure();
            string value = string.Empty;
            string iniPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "configure.ini");

            if (File.Exists(iniPath))
            {
                config.IniPath = iniPath;
                value = config.GetValue(select, key);

            }
            return value;
        }

        public static string RemoveEnter(string text)
        {
            string str = text.Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "");
            return str;
        }

        public static string AddEnter(string text)
        {
            string str = text.Replace("。", "。" + Environment.NewLine).Replace("\t", "\t" + Environment.NewLine);
            return str;
        }

        public static string AddPointEnter(string text)
        {
            //增加遇到点就换行
            string str = text.Replace(".", "." + Environment.NewLine);
            return str;
        }

        public static string RemoveBlankLines(string input)
        {
            // 正则表达式匹配一个或多个空白字符开始和结束的换行符
            string pattern = @"^\s*\r?\n";
            // 使用Multiline选项，^和$会匹配每一行的开始和结束，而不是整个字符串的开始和结束
            return Regex.Replace(input, pattern, "", RegexOptions.Multiline);
        }

        public static string RmoveTxtLog(string input) 
        {
            string Begin = GetIniValue("LogText", "Begin");
            string End = GetIniValue("LogText", "End");
            string result = string.Empty;
            if (!string.IsNullOrEmpty(Begin) || !string.IsNullOrEmpty(End)) {
                Regex r = new Regex(GetIniValue("LogText", "Begin") + "[.\\s\\S]*?" + GetIniValue("LogText", "End"), RegexOptions.IgnoreCase);
                result = r.Replace(input, "");
            }
            return result;

        }


        public static bool IsTextFile(string filePath)
        {
            // 检查文件是否存在
            if (!File.Exists(filePath))
            {
                return false;
            }

            // 获取文件属性
            FileAttributes attributes = File.GetAttributes(filePath);

            // 判断是否是常规文件，并排除特殊文件类型（如设备、目录等）
            if (!attributes.HasFlag(FileAttributes.Normal) ||
                attributes.HasFlag(FileAttributes.Directory))
            {
                return false;
            }

            // 尝试打开文件进行读取，判断是否可以按文本方式读取
            try
            {
                using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                using (StreamReader reader = new StreamReader(fileStream))
                {
                    // 读取第一个字符，不做实际读取操作
                    char firstChar = (char)reader.Read();

                    // 判断是否是文本文件的开始字符
                    return char.IsLetter(firstChar) || char.IsDigit(firstChar) || firstChar == '\ufeff'; // BOM
                }
            }
            catch
            {
                // 如果无法读取，则认为不是文本文件
                return false;
            }
        }

        public static bool CheckIsTextFile(string fileName)
        {
            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            bool isTextFile = true;
            try
            {
                int i = 0;
                int length = (int)fs.Length;
                byte data;
                while (i < length && isTextFile)
                {
                    data = (byte)fs.ReadByte();
                    isTextFile = (data != 0);
                    i++;
                }
                return isTextFile;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
            }
        }

        //public static void checkBox_CheckedChanged(object sender, EventArgs e)
        //{
        //    CheckBox ex = (CheckBox)sender;
        //}
    }
}
